package models.services;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import models.entities.Categoria;
import models.entities.Producto;
import models.services.exc.EntityNotFoundException;
import models.services.utils.DBManager;

public class ServicioProductos implements ICatalog<Producto> {

	private final static Logger logger = Logger
			.getLogger(ServicioProductos.class);

	@Override
	public boolean borrar(Producto entity) {
		DBManager manager = DBManager.getInstance();
		return manager.borrar(entity.getId(), "productos");
	}

	@Override
	public int guardarActualizar(Producto prod) {
		DBManager manager = DBManager.getInstance();
		String descripcion = prod.getDescripcion();
		int idProveedor = prod.getIdProveedor();
		String marca = prod.getMarca();
		String nombre = prod.getNombre();
		double precio = prod.getPrecio();
		boolean status = prod.getStatus();

		String valor = String.valueOf(prod.getCategoria());
		System.out.println("   " + valor);
		int dato;
		if (valor.equals("Equipo")) {
			dato = 0;
		} else {
			dato = 1;
		}

		/*
		 * String sql = "insert into productos values(null,'" + nombre + "'," +
		 * precio + ",'" + descripcion + "',"+dato+"," + idProveedor + ",'" +
		 * marca + "')";
		 */
		String sql = "insert into productos values(null,'" + nombre + "',"
				+ precio + ",'" + descripcion + "'," + dato + "," + idProveedor
				+ ",'" + marca + "'," + status + ")";
		int ret = manager.guardarActualizar(sql);
		return ret;
	}

	@Override
	public Producto obtener(int id) throws EntityNotFoundException {
		String consulta = "select * from productos where id=" + id;
		ResultSet rs = DBManager.getInstance().consultar(consulta);
		Producto prod = new Producto();
		try {
			if (rs.next()) {
				do {
					int idGet = rs.getInt("id");
					String nombre = rs.getString("nombre");
					double precio = rs.getDouble("precio");
					String desc = rs.getString("descripcion");
					// int catID = rs.getInt("categoriaid");
					int provID = rs.getInt("proveedorid");
					String marca = rs.getString("marca");
					prod.setDescripcion(desc);
					prod.setId(idGet);
					prod.setIdProveedor(provID);
					prod.setMarca(marca);
					prod.setNombre(nombre);
					prod.setPrecio(precio);
					prod.setCategoria(Categoria.Equipo);
				} while (rs.next());
			} else {
				throw new EntityNotFoundException("Producto no encontrado");
			}

		} catch (SQLException e) {
			logger.error(e.getCause(), e);
		}
		return prod;
	}

	public int update(String campo, String value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update productos set " + campo + " = '" + value
				+ "' where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;
	}

	public int update(String campo, int value, int id) {
		DBManager manager = DBManager.getInstance();
		String sql = "update productos set " + campo + " = " + value
				+ " where id=" + id;
		int guardarActualizar = manager.guardarActualizar(sql);
		return guardarActualizar;

	}

	@Override
	public List<Producto> buscarPorNumero(String campo, int valor) {
		List<Producto> prods = new ArrayList<Producto>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from productos where " + campo + " = " + valor;
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, prods);
	}

	@Override
	public List<Producto> buscarPorString(String campo, String valor) {
		List<Producto> prods = new ArrayList<Producto>();
		DBManager manager = DBManager.getInstance();
		String sql = "select * from productos where " + campo + " like '%"
				+ valor + "%'";
		ResultSet rs = manager.consultar(sql);
		return this.buscar(rs, prods);
	}

	private List<Producto> buscar(ResultSet rs, List<Producto> prods) {
		try {
			Producto prod = new Producto();
			while (rs.next()) {
				int idGet = rs.getInt("id");
				String nombre = rs.getString("nombre");
				double precio = rs.getDouble("precio");
				String desc = rs.getString("descripcion");
				// int catID = rs.getInt("categoriaid");
				int provID = rs.getInt("proveedorid");
				String marca = rs.getString("marca");
				prod.setDescripcion(desc);
				prod.setId(idGet);
				prod.setIdProveedor(provID);
				prod.setMarca(marca);
				prod.setNombre(nombre);
				prod.setPrecio(precio);
				prod.setCategoria(Categoria.Equipo);
				prods.add(prod);
			}
		} catch (Exception e) {
			logger.error(e.getCause(), e);
			return null;
		}
		return prods;
	}

}
